package AccionesSemanticas;
import Lexico.AnalizadorLexico;
import Elementos.Doble;
import Elementos.Token;
import Lexico.EntradaTS;
import Elementos.Mensaje;

//Procesa un double, lo parsea, comprueba rango, y lo agrega si no esta. Devuelve su token
public class AccS6 extends AccionSemantica {
	
	public AccS6(AnalizadorLexico al) {
		super(al);
	}
	
	@Override
	public int ejecutar(String actual, String leido) {		
		
		Doble parseado= new Doble(actual,"double");
		Token devolver= new Token(new Integer(0));
		if (!parseado.estaEnRango()){                                                     				//esta fuera de rango
			Mensaje m= new Mensaje(Mensaje.ERROR, "Double fuera de rango. Linea: ", this.aLexico.getLineaActual());
			this.aLexico.addMensaje(m);
			devolver= new Token("double", 0, Token.CTEFUERADERANGO);	
		}
		else{
			EntradaTS nuevo= new EntradaTS(parseado, this.aLexico.getLineaActual(), "double");
			int pos= this.aLexico.getTablaSimbolos().existeSimboloID(nuevo);
			if(pos==0){																					//inserta en tabla y devuelve	
				pos= this.aLexico.getTablaSimbolos().insertSimbolo(nuevo);
				devolver= new Token("double", pos, Token.CTEDOBLE);				
			}
			else																						//devuelve el que esta en tabla
				devolver= new Token("double", pos, Token.CTEDOBLE);			
		}
		this.aLexico.setTokenActual(devolver);
		return -1;
	}	
	
	public static void main(String[] args) {		
		
	}
	
}
